// 扩展3. 模板函数重载
/**
 * 
*/

#include <iostream>
#define __mark 1

/**
 * #1 测试自定义类型 与变量重复
*/
#if 1 == __mark
template <class T>
void print(T a, T b)
{
  std::cout << "1" << std::endl;
  std::cout << "a : " << a << std::endl;
  std::cout << "b : " << b << std::endl;
}
//  error: redefinition of 'template<class T1> void print(T1, T1)'
// template <class T1>
// void print(T1 a, T1 b)
// {
//   std::cout << "a : " << a << std::endl;
//   std::cout << "b : " << b << std::endl;
// }

// 下面这个也是可以的,不过print(1, 2)调的是1
// template <class T1, class T2>
// void print(T1 a, T1 b)
// {
//   std::cout << "2" << std::endl;
//   std::cout << "a : " << a << std::endl;
//   std::cout << "b : " << b << std::endl;
// }

// 这肯定可以呀
template <class T1, class T2>
void print(T1 a, T2 b)
{
  std::cout << "3" << std::endl;
  std::cout << "a : " << a << std::endl;
  std::cout << "b : " << b << std::endl;
}
int main(void)
{
  print(1, 2);
  print(1.2, "1111");

  printf("--------------------end-------------------\n");
  return 0;
}
/**
 * #2 
*/
#elif 2 == __mark
int main(void)
{
  printf("--------------------end-------------------\n");
  return 0;
}
#endif